package utilitarios;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Arquivo {
	
	//as exceções devem ser tratadas dentro do main e não relançadas
	public static void main(String[] args) throws IOException {
		
		//leArquivoTexto("arq1-lp2.txt");
		
		//leArquivoTexto("arq2-lp2.txt");
		
		//quebra cada linha do arquivo pelo separador 
		List<Musica> musics = new ArrayList<Musica>();
		musics = leArquivoTexto("ListaMusicas.txt", ":");
		escreveArquivoObjetos("Musicas.data",musics);
		leArquivoObjetos("Musicas.data");
	}
	
	private static void escreveArquivoObjetos(String nomeArquivo, List<Musica> musicas) throws IOException{
		
		ObjectOutputStream arquivo = null;
		try{
			arquivo = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(nomeArquivo)));
			arquivo.writeObject(musicas);
		}catch(Exception e){
			System.err.println(e.getMessage());
		}finally{
			if (arquivo != null) arquivo.close();
		}
	}
	
	private static void leArquivoObjetos(String nomeArquivo) throws IOException{
		List<String> cadastro;
		
		ObjectInputStream arquivo = null;
		try{
			arquivo = new ObjectInputStream(new BufferedInputStream(new FileInputStream(nomeArquivo)));
			cadastro = (List<String>) arquivo.readObject();
			System.out.println(cadastro);
			/*
			 * Para ler varios objetos do arquivo
			 * try{
			 * 	while(true){
			 * 		cadastro = (List<String>) arquivo.readObject();
			 * 	}
			 * }catch(EOFException e){
			 * 	...
			 * }
			 */
		}catch(Exception e){
			System.err.println(e.getMessage());
		}finally{
			if (arquivo != null) arquivo.close();
		}
		
	}
	
	//Usando Scanner
	private static ArrayList<Musica> leArquivoTexto(String nomeArquivo, String separador) throws IOException{
		FileInputStream arquivo = null;
		List<Musica> musicas = new ArrayList<Musica>();
		
		try{
			arquivo = new FileInputStream(new File(nomeArquivo));
			Scanner sc = new Scanner(arquivo);
			
			while(sc.hasNext()){
				String linha = sc.nextLine();
				String[] linhaQuebrada = linha.split(separador); 
				System.out.println(linhaQuebrada[1]);
				Musica music = new Musica(linhaQuebrada[0] ,linhaQuebrada[1], linhaQuebrada[2], linhaQuebrada[3], linhaQuebrada[4], linhaQuebrada[5]);
				musicas.add(music);
				System.out.println(music.toString());
			}
			return (ArrayList<Musica>) musicas;
		}catch(Exception e){
			System.err.println(e.getMessage());
		}finally{
			if (arquivo != null) arquivo.close();
		}
		return (ArrayList<Musica>) musicas;
	}

}